package com.platform.helper.string;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;


/**
 * @author rainly
 * @email 610232785@qq.com
 * @time 2020年3月2日 上午10:48:23
 */
public class XmlTool {

    private static Logger logger = LoggerFactory.getLogger(XmlTool.class);

    /**
     * 获得操作xml文件的对象
     *
     * @param file
     * @return
     * @throws Exception
     */
    public static Document getDocument(File file) throws Exception {
        //创建SAXReader对象
        SAXReader reader = new SAXReader();
        //读取文件 转换成Document
        Document document = reader.read(file);
        return document;
    }

    public static Document getDocument(InputStream inputStream) throws Exception {
        //创建SAXReader对象
        SAXReader reader = new SAXReader();
        //读取文件 转换成Document
        Document document = reader.read(inputStream);
        return document;
    }

    /**
     * 获得操作xml文件的对象
     *
     * @param xmlStr
     * @return
     * @throws Exception
     */
    public static Document getDocument(String xmlStr) throws Exception {
        if (null != xmlStr && !"".equals(xmlStr)) {
            return null;
        }
        Document document = DocumentHelper.parseText(xmlStr);
        return document;
    }

    public static int num = 1;

    /**
     * 遍历当前节点下的所有节点
     *
     * @param node
     */
    public static void listNodes(Element node) {
        logger.info("当前节点的名称：" + node.getName() + "     " + num);
        num = num + 1;
        //首先获取当前节点的所有属性节点
        List<Attribute> list = node.attributes();
        //遍历属性节点
        for (Attribute attribute : list) {
            logger.info("属性" + attribute.getName() + ":" + attribute.getValue());
        }
        //如果当前节点内容不为空，则输出
        if (!(node.getTextTrim().equals(""))) {
            logger.info(node.getName() + "：" + node.getText());
        }
        //同时迭代当前节点下面的所有子节点
        //使用递归
        Iterator<Element> iterator = node.elementIterator();
        while (iterator.hasNext()) {
            Element e = iterator.next();
            listNodes(e);
        }
    }
}


